/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package contatos.presenter;

import contatos.collection.Contatos;
import contatos.collection.Iterator;
import contatos.collection.ManagementCollection;
import contatos.collection.SistemaACollection;
import contatos.collection.XML;
import contatos.model.Contato;
import contatos.view.ImportarContatoView;
import contatos.view.ProgressBarView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import managementcollaborators.Collaborator;
import managementcollaborators.ManagementCollaboratorsSystem;
import sistemaa.Cliente;
import sistemaa.SistemaA;

/**
 *
 * @author felipe
 */
public class ImportarContatosPresenter {

    private Contatos contatos;
    private ImportarContatoView view;
    private ProgressBarView progressView;

    public ImportarContatosPresenter() {
        try {
            contatos = Contatos.getInstancia();
            view = new ImportarContatoView();

            //botao ok
            view.getBtnOk().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    importarContatos();
                }
            });

            //botao fechar
            view.getBtnFechar().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    view.setVisible(false);
                    view.dispose();
                }
            });

            //view de progresso
            progressView = new ProgressBarView();
            progressView.getBtnFechar().setEnabled(false);
            progressView.getProgressBar().setStringPainted(true);

            progressView.getBtnFechar().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    progressView.setVisible(false);
                    progressView.dispose();
                }
            });

            view.setVisible(true);

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(view, ex.getMessage());
        }
    }

    private void importarContatos() {

        Thread queryThread = new Thread() {
            @Override
            public void run() {
                try {
                    //iterator
                    Iterator it = null;
                    int collectionSize = 0;
                    int i = 0;

                    switch (view.getCbGrafico().getSelectedIndex()) {
                        case -1:
                            throw new Exception("Selecione a fonte de dados para importar os contatos");
                        case 0:
                            XML xml = new XML();
                            xml.importarXML();
                            collectionSize = xml.size();
                            if (collectionSize == 0) {
                                return;
                            }
                            it = xml.criarIterator();
                            break;
                        case 1:
                            SistemaACollection colecao = new SistemaACollection(SistemaA.getTodosClientes());
                            collectionSize = colecao.size();
                            it = colecao.criarIterator();
                            break;
                        case 2:
                            ManagementCollection colecaoManagement = new ManagementCollection(ManagementCollaboratorsSystem.getCollaborators());
                            collectionSize = colecaoManagement.size();
                            it = colecaoManagement.criarIterator();
                            break;
                    }

                    //mostrando a view de progresso
                    progressView.setVisible(true);

                    //fechando a view anterior
                    view.setVisible(false);
                    view.dispose();

                    while (it.hasNext()) {
                        Object obj = it.next();
                        String nome = null;
                        String telefone = null;
                        String operadora = "";
                        String uf = "";

                        boolean add;

                        //verificando qual a instancia do objeto
                        if (obj instanceof Cliente) {
                            Cliente cliente = (Cliente) obj;
                            nome = cliente.getNomeCompleto();
                            telefone = cliente.getTelefone().replace(" ", "").trim();
                        } else if (obj instanceof Collaborator) {
                            Collaborator collaborator = (Collaborator) obj;
                            nome = collaborator.getFirstName() + collaborator.getMiddleName() + collaborator.getLastName();
                            telefone = collaborator.getPhone().replace(" ", "").trim();
                        } else if (obj instanceof Contato) {
                            Contato contato = (Contato) obj;
                            nome = contato.getNome();
                            telefone = contato.getTelefone().replace(" ", "").trim();
                            operadora = contato.getOperadora();
                            uf = contato.getUf();
                        }

                        add = contatos.incluir(new Contato(nome, telefone, operadora, uf));

                        i++;
                        int porcentagem = i * 100 / collectionSize;

                        progressView.getProgressBar().setValue(porcentagem);
                        if (add) {
                            progressView.getTxtAreaProgress().append("Contato " + nome + " importado com sucesso!\n");
                        } else {
                            progressView.getTxtAreaProgress().append("Contato " + nome + " não importado, número já existente: " + telefone + "\n");
                        }
                    }

                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(view, ex.getMessage());
                } finally {
                    //ao termino da importação, habilita o botão de fechar da barra de progresso
                    progressView.getBtnFechar().setEnabled(true);
                }
            }
        };
        queryThread.start();
    }
}
